package testes;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import iscte.es.copaPaises.businessLayer.Campeonato;
import iscte.es.copaPaises.businessLayer.Cidade;
import iscte.es.copaPaises.businessLayer.Clube;
import iscte.es.copaPaises.businessLayer.Continente;
import iscte.es.copaPaises.businessLayer.Equipa;
import iscte.es.copaPaises.businessLayer.Grupo;
import iscte.es.copaPaises.businessLayer.Jogador;
import iscte.es.copaPaises.businessLayer.Jogo;
import iscte.es.copaPaises.businessLayer.Pais;
import iscte.es.copaPaises.businessLayer.Participacao;
import iscte.es.copaPaises.businessLayer.Participante;

import java.util.HashSet;
import java.util.Set;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

public class PaisTest {
	protected Pais pais;
	protected int populacao;
	protected Continente continente;
	protected Grupo grupo;
	protected int area;
	protected String nome;
	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
	}

	@AfterClass
	public static void tearDownAfterClass() throws Exception {
	}

	@Before
	public void setUp() throws Exception {
		pais=new Pais();
		populacao=100;
		continente=new Continente();
		grupo=new Grupo();
		area=300;
		nome="Angola";
	}

	@After
	public void tearDown() throws Exception {
	}

	@Test
	public void testPais() {
		assertTrue("Pais()",Pais.allInstances.contains(pais));
	}

	@Test
	public void testPaisIntStringIntContinenteGrupo() {
		pais=new Pais(area,nome,populacao,continente,grupo);
		assertTrue("Pais(area,nome,populacao,continente,grupo)",Pais.allInstances.contains(pais));	
	}

	@Test
	public void testArea() {
		pais.setArea(area);
		assertEquals("Setter Getter Pais.area()",pais.area(),area);
	}

	@Test
	public void testNome(){
		pais.setNome(nome);
		assertEquals("Setter Getter Pais.nome()",pais.nome(),nome);
	}

	@Test
	public void testPopulacao() {
		pais.setPopulacao(populacao);
		assertEquals("Setter Getter Pais.populacao()",pais.populacao(),populacao);
	}

	@Test
	public void testContinente() {
		pais.setContinente(continente);
		assertEquals("Setter Getter Pais.continente()",pais.continente(),continente);
	}

	@Test
	public void testGrupo() {
		pais.setGrupo(grupo);
		assertEquals("Setter Getter Pais.grupo()",pais.grupo(),grupo);
	}	

	@Test
	public void testClubes() {
		Clube clube1=new Clube();
		Clube clube2=new Clube();
		Set<Clube> clubes=new HashSet<Clube>();
		clubes.add(clube1);
		clubes.add(clube2);
		pais.setClubes(clubes);
		assertEquals("Setter Getter Pais.Clubes()",clubes,pais.clubes());
		
	}

	@Test
	public void testNacionais() {
		Jogador j1=new Jogador();
		Jogador j2=new Jogador();
		Set<Participante> nacionais=new HashSet<Participante>();
		nacionais.add(j1);
		nacionais.add(j2);
		pais.setNacionais(nacionais);
		assertEquals("Setter Getter Pais.Nacionais()",nacionais,pais.nacionais());
	}

	@Test
	public void testEquipa() {
		Equipa e1=new Equipa();
		Equipa e2=new Equipa();
		Set<Equipa> equipas=new HashSet<Equipa>();
		equipas.add(e1);
		equipas.add(e2);
		pais.setEquipa(equipas);
		assertEquals("Setter Getter Pais.equipa()",equipas,pais.equipa());
	}

	@Test
	public void testJogo() {
		Equipa e3=new Equipa();
		Equipa e1=new Equipa();
		Equipa e2=new Equipa();
		
		Jogo jogo1=new Jogo();
		Jogo jogo2=new Jogo();
		Set<Jogo> jogos=new HashSet<Jogo>();
		Set<Equipa> equipas=new HashSet<Equipa>();

		equipas.add(e1);equipas.add(e2);
		pais.setEquipa(equipas);
		
		jogos.add(jogo1);jogos.add(jogo2);
		pais.setJogo(jogos);
		
		assertEquals("Setter/Getter Pais.jogo()",pais.jogo(),jogos);

	}

	@Test
	public void testCidades() {
		 Cidade c1=new Cidade();
		 Cidade c2=new Cidade();
		Set<Cidade> cidades=new HashSet<Cidade>();
		cidades.add(c1);
		cidades.add(c2);
		pais.setCidades(cidades);
		assertEquals("Setter Getter Pais.cidades()",cidades,pais.cidades());
	}
	

	@Test
	public void testParticipacao() {
		 Participacao p1=new Participacao();
		 Participacao p2=new Participacao();
		Set<Participacao> participacoes=new HashSet<Participacao>();
		participacoes.add(p1);
		participacoes.add(p2);
		pais.setParticipacao(participacoes);
		assertEquals("Setter Getter Pais.participacao()",participacoes,pais.participacao());
	}

	@Test
	public void testParticipado() {
			Participacao p3=new Participacao();
			Participacao p1=new Participacao();
			Participacao p2=new Participacao();
			
			Campeonato c1=new Campeonato();
			Campeonato c2=new Campeonato();
			Set<Campeonato> campeonatos=new HashSet<Campeonato>();
			Set<Participacao> participacoes=new HashSet<Participacao>();

			participacoes.add(p1);participacoes.add(p2);
			pais.setParticipacao(participacoes);
			
			campeonatos.add(c1);campeonatos.add(c2);
			pais.setParticipado(campeonatos);
			
			assertEquals("Setter/Getter Pais.participado()",pais.participado(),campeonatos);

	}

	@Test
	public void testInicializa() {
		pais.inicializa(nome, populacao, area, continente);
		assertEquals("Pais.inicializa(nome, populacao, area, continente)",nome,pais.nome());
		assertEquals("Pais.inicializa(nome, populacao, area, continente)",populacao,pais.populacao());
		assertEquals("Pais.inicializa(nome, populacao, area, continente)",area,pais.area());
		assertEquals("Pais.inicializa(nome, populacao, area, continente)",continente,pais.continente());
	}

	@Test
	public void testToString() {
		pais=new Pais(area,nome,populacao,continente,grupo);
		assertEquals("Pais.toString()",pais.toString(),"Pais [area=" + area + ", nome=" + nome + ", populacao=" + populacao + ", continente=" + continente + ", grupo=" + grupo + "]\n");
	}

}
